/**
 * 研发流程状态机MobX Store
 * 按照研发流程状态机.md文档设计实现
 */
const mobx = require('mobx-miniprogram');
const observable = mobx.observable;
const action = mobx.action;
const computed = mobx.computed;

// 使用统一配置入口导入所需模块
const helpers = require('../../../config/project_helpers_config');
const cloudHelper = helpers.cloudHelper;
// 使用统一配置入口导入时间工具
const { timeHelper } = require('../../../config/project_helpers_config');

/**
 * 项目状态定义 - 按研发流程状态机文档定义
 */
const PROJECT_STATUS = {
  // 基础状态
  NONE: 0,            // 初始状态
  REVIEWING: 1,       // 项目审核
  DORMANT: 2,         // 休眠
  ACTIVE: 3,          // 活动
  COMPLETED: 99,      // 完成项目
};

/**
 * 活动状态定义 - 按研发流程状态机文档定义
 */
const ACTIVE_STATE = {
  HARDWARE_CONFIRM: 'hardware_confirm',                 // 硬件确认
  HARDWARE_DESIGN_SAMPLE: 'hardware_design_sample',     // 硬件设计打样
  SW_HW_DEBUG: 'sw_hw_debug',                           // 软硬件调试
  DATA_SYNC: 'data_sync',                               // 资料同步
  TESTING: 'testing',                                   // 测试验证
  CUSTOMER_CONFIRM: 'customer_confirm',                 // 客户确认
  ORDER_PREPARATION: 'order_preparation',               // 订单准备
  PRODUCTION: 'production',                             // 生产
  PRODUCT_FEEDBACK: 'product_feedback'                  // 产品待客户反馈
};

/**
 * 子状态定义 - 按研发流程状态机文档定义
 */
const SUB_STATE = {
  // 项目审核子状态
  REVIEW_DIRECTOR: 'review_director',           // 待董事长审核
  REVIEW_MANAGER: 'review_manager',             // 待研发经理审核
  REVIEW_ASSIGN: 'review_assign',               // 项目分配
  
  // 休眠子状态
  DORMANT_REVIEW: 'dormant_review',             // 研发审核
  DORMANT_ARCHIVE: 'dormant_archive',           // 休眠归档
  
  // 硬件设计打样子状态
  HW_DESIGN: 'hw_design',                       // 硬件设计
  HW_REVIEW: 'hw_review',                       // 硬件审核
  HW_PURCHASE_SAMPLE: 'hw_purchase_sample',     // 采购打样
  HW_SAMPLE_MAKING: 'hw_sample_making',         // 样品组制样
  HW_SAMPLE_STORAGE: 'hw_sample_storage',       // 样品在库
  
  // 测试验证子状态
  TESTING_IN_PROGRESS: 'testing_in_progress',   // 测试中
  TESTING_NO_TEST: 'testing_no_test',           // 无测试审核
  
  // 客户确认子状态
  CUSTOMER_SHIPPING: 'customer_shipping',       // 寄样
  CUSTOMER_TESTING: 'customer_testing',         // 客户测试
  CUSTOMER_NO_SIGN: 'customer_no_sign',         // 无签样审核
  CUSTOMER_SAMPLE_STORAGE: 'customer_sample_storage', // 样品入库
  CUSTOMER_ARCHIVING: 'customer_archiving',     // 归档
  
  // 无签样审核子状态
  NO_SIGN_MANAGER_REVIEW: 'no_sign_manager_review', // 研发经理审核
  NO_SIGN_DIRECTOR_REVIEW: 'no_sign_director_review', // 董事长审核
  
  // 订单准备子状态
  ORDER_PENDING: 'order_pending',               // 待量产
  ORDER_REVIEW: 'order_review',                 // 订单审核
  ORDER_DOCS_SENDING: 'order_docs_sending',     // 文控发送生产资料
  ORDER_DOCS_SUPPLEMENT: 'order_docs_supplement', // 研发补充资料
  ORDER_MEETING: 'order_meeting',               // 产前会议
  ORDER_PREPARATION: 'order_preparation',       // 生产准备
  
  // 生产子状态
  PRODUCTION_IN_PROGRESS: 'production_in_progress', // 生产中
  PRODUCTION_PE_ISSUE: 'production_pe_issue',    // PE问题处理中
  PRODUCTION_RD_ISSUE: 'production_rd_issue',    // 研发问题排查
  PRODUCTION_COMPLETED: 'production_completed'   // 生产完成
};

/**
 * 状态事件定义 - 按研发流程状态机文档定义的事件
 */
const STATE_EVENTS = {
  // 项目审核事件
  SUBMIT_REQUEST: 'submit_request',              // 提交功能需求表
  DIRECTOR_APPROVE: 'director_approve',          // 董事长审核通过
  DIRECTOR_REJECT: 'director_reject',            // 董事长审核不通过
  MANAGER_APPROVE: 'manager_approve',            // 研发经理审核通过
  MANAGER_REJECT: 'manager_reject',              // 研发经理审核不通过
  PROJECT_ASSIGN_COMPLETE: 'project_assign_complete', // 提交分配
  
  // 休眠事件
  SLEEP_REQUEST: 'sleep_request',                // 业务提交休眠申请
  SLEEP_APPROVE: 'sleep_approve',                // 休眠审核通过
  SLEEP_REJECT: 'sleep_reject',                  // 休眠审核不通过
  WAKEUP_REQUEST: 'wakeup_request',              // 业务提交唤醒申请
  
  // 硬件确认事件
  HW_CONFIRM_COMPLETED: 'hw_confirm_completed',  // 硬件确认完成
  HW_EXISTING: 'hw_existing',                    // 已有硬件
  
  // 软硬件调试事件
  DEBUG_COMPLETE: 'debug_complete',              // 调试完成
  HW_CONFIRM_AGAIN: 'hw_confirm_again',          // 重新确认硬件
  CANCEL_FUNCTION_ISSUE: 'cancel_function_issue', // 撤销功能问题
  CANCEL_ISSUE: 'cancel_issue',                  // 撤销问题申请
  
  // 其他更多事件...
};

/**
 * 研发流程状态机Store
 */
const researchStateMachineStore = observable({
  // 当前项目数据
  project: null,
  
  // 当前用户角色
  currentRole: '',
  
  // 模拟的角色（用于调试）
  simulatedRole: '',
  
  // 当前状态下可用的事件
  availableEvents: [],
  
  // 资源上传状态
  resourceUploads: [],
  
  // 需要的文档
  requiredDocs: [],
  
  // 设置项目数据
  setProject: action(function(project) {
    this.project = project;
    
    // 加载该项目状态下可用的事件
    this.loadAvailableEvents();
  }),
  
  // 设置当前角色
  setCurrentRole: action(function(role) {
    this.currentRole = role;
    
    // 更新可用事件
    this.loadAvailableEvents();
  }),
  
  // 模拟角色（调试用）
  simulateRole: action(function(role) {
    this.simulatedRole = role;
    
    // 更新可用事件
    this.loadAvailableEvents();
  }),
  
  // 获取当前角色（实际角色或模拟角色）
  get getCurrentRole() {
    return this.simulatedRole || this.currentRole || 'visitor';
  },
  
  // 获取当前状态描述
  get getCurrentStateDescription() {
    if (!this.project) return '未知状态';
    
    // 状态文本格式化
    const statusName = this._getStatusName(this.project.PROJECT_STATUS);
    const activeStateName = this.project.PROJECT_ACTIVE_STATE ? 
      this._getActiveStateName(this.project.PROJECT_ACTIVE_STATE) : '';
    const subStateName = this.project.PROJECT_SUB_STATE ?
      this._getSubStateName(this.project.PROJECT_SUB_STATE) : '';
    
    // 组合状态描述
    if (subStateName) {
      return `${statusName} > ${activeStateName} > ${subStateName}`;
    } else if (activeStateName) {
      return `${statusName} > ${activeStateName}`;
    } else {
      return statusName;
    }
  },
  
  // 加载可用事件
  loadAvailableEvents: action(async function() {
    if (!this.project) return;
    
    try {
      // 模拟获取可用事件的逻辑，实际应该从服务端获取
      // 或根据状态机规则在前端计算
      this.availableEvents = this._getAvailableEventsForCurrentState();
    } catch (error) {
      console.error('加载可用事件失败:', error);
      this.availableEvents = [];
    }
  }),
  
  // 获取当前状态下可用的事件
  _getAvailableEventsForCurrentState() {
    // 此处模拟逻辑，实际应根据状态机规则实现
    if (this.project.PROJECT_STATUS === PROJECT_STATUS.REVIEWING) {
      return ['director_approve', 'director_reject'];
    } else if (this.project.PROJECT_STATUS === PROJECT_STATUS.ACTIVE) {
      return ['sleep_request', 'complete_project'];
    } else {
      return [];
    }
  },
  
  // 获取状态名称
  _getStatusName(status) {
    const statusMap = {
      [PROJECT_STATUS.NONE]: '初始状态',
      [PROJECT_STATUS.REVIEWING]: '项目审核',
      [PROJECT_STATUS.DORMANT]: '休眠',
      [PROJECT_STATUS.ACTIVE]: '活动',
      [PROJECT_STATUS.COMPLETED]: '已完成'
    };
    
    return statusMap[status] || '未知状态';
  },
  
  // 获取活动状态名称
  _getActiveStateName(activeState) {
    const activeStateMap = {
      [ACTIVE_STATE.HARDWARE_CONFIRM]: '硬件确认',
      [ACTIVE_STATE.HARDWARE_DESIGN_SAMPLE]: '硬件设计打样',
      [ACTIVE_STATE.SW_HW_DEBUG]: '软硬件调试',
      [ACTIVE_STATE.DATA_SYNC]: '资料同步',
      [ACTIVE_STATE.TESTING]: '测试验证',
      [ACTIVE_STATE.CUSTOMER_CONFIRM]: '客户确认',
      [ACTIVE_STATE.ORDER_PREPARATION]: '订单准备',
      [ACTIVE_STATE.PRODUCTION]: '生产',
      [ACTIVE_STATE.PRODUCT_FEEDBACK]: '产品待客户反馈'
    };
    
    return activeStateMap[activeState] || '未知活动状态';
  },
  
  // 获取子状态名称
  _getSubStateName(subState) {
    const subStateMap = {
      // 项目审核子状态
      [SUB_STATE.REVIEW_DIRECTOR]: '待董事长审核',
      [SUB_STATE.REVIEW_MANAGER]: '待研发经理审核',
      [SUB_STATE.REVIEW_ASSIGN]: '项目分配',
      
      // 休眠子状态
      [SUB_STATE.DORMANT_REVIEW]: '研发审核',
      [SUB_STATE.DORMANT_ARCHIVE]: '休眠归档',
      
      // 硬件设计打样子状态
      [SUB_STATE.HW_DESIGN]: '硬件设计',
      [SUB_STATE.HW_REVIEW]: '硬件审核',
      [SUB_STATE.HW_PURCHASE_SAMPLE]: '采购打样',
      [SUB_STATE.HW_SAMPLE_MAKING]: '样品组制样',
      [SUB_STATE.HW_SAMPLE_STORAGE]: '样品在库',
      
      // 测试验证子状态
      [SUB_STATE.TESTING_IN_PROGRESS]: '测试中',
      [SUB_STATE.TESTING_NO_TEST]: '无测试审核',
      
      // 客户确认子状态
      [SUB_STATE.CUSTOMER_SHIPPING]: '寄样',
      [SUB_STATE.CUSTOMER_TESTING]: '客户测试',
      [SUB_STATE.CUSTOMER_NO_SIGN]: '无签样审核',
      [SUB_STATE.CUSTOMER_SAMPLE_STORAGE]: '样品入库',
      [SUB_STATE.CUSTOMER_ARCHIVING]: '归档',
      
      // 无签样审核子状态
      [SUB_STATE.NO_SIGN_MANAGER_REVIEW]: '研发经理审核',
      [SUB_STATE.NO_SIGN_DIRECTOR_REVIEW]: '董事长审核',
      
      // 订单准备子状态
      [SUB_STATE.ORDER_PENDING]: '待量产',
      [SUB_STATE.ORDER_REVIEW]: '订单审核',
      [SUB_STATE.ORDER_DOCS_SENDING]: '文控发送生产资料',
      [SUB_STATE.ORDER_DOCS_SUPPLEMENT]: '研发补充资料',
      [SUB_STATE.ORDER_MEETING]: '产前会议',
      [SUB_STATE.ORDER_PREPARATION]: '生产准备',
      
      // 生产子状态
      [SUB_STATE.PRODUCTION_IN_PROGRESS]: '生产中',
      [SUB_STATE.PRODUCTION_PE_ISSUE]: 'PE问题处理中',
      [SUB_STATE.PRODUCTION_RD_ISSUE]: '研发问题排查',
      [SUB_STATE.PRODUCTION_COMPLETED]: '生产完成'
    };
    
    return subStateMap[subState] || '未知子状态';
  }
});

// 导出模块
module.exports = {
  PROJECT_STATUS,
  ACTIVE_STATE,
  SUB_STATE,
  STATE_EVENTS,
  researchStateMachineStore
}; 